package HomeWork.test2;

import java.io.*;
import java.util.*;

public class Test {
    /*
        需求设计批改选择题程序，程序主要功能：
            1.读取文件夹中的学生答题卡
                答题卡命名规范：学生姓名.txt 例如：张三.txt（不考虑学生姓名重复情况）
                答题卡内容：
                    题号.答案 答案大小写字母均可
                    1-5 题：单选题一题 2分
                    6-10提：多选题一题 5分（错选，漏选没分）
            2.批改学生成绩，统计
                将学生姓名和成绩组成的键值对
                姓名:成绩
                按照成绩总分从高到低（成绩相同按姓名自然排序）写出到info.txt文件中，每个学生成绩独占一行

            3.标准答案，编写在answer.properties文件中
     */
    public static void main(String[] args) throws IOException {
        // 加载答案
        Properties answer = new Properties();
        FileReader fr = new FileReader("AdvancedCode\\src\\HomeWork\\test2\\answer.properties");
        answer.load(fr);
        fr.close();

        // 获取学生答题卡文件列表
        File stuAnswer = new File("E:\\Project-IDEA\\Study_java\\AdvancedCode\\src\\HomeWork\\test2\\student_answers");
        File[] stuAnswers = stuAnswer.listFiles();
        // 检查答题卡文件列表是否为空
        Objects.requireNonNull(stuAnswers);
        // 定义一个存储学生答题卡的集合，键为学生名字，值为学生答题卡
        HashMap<String, HashMap<String, String>> stuList = new HashMap<>();
        for (File stuAns : stuAnswers) {
            BufferedReader br = new BufferedReader(new FileReader(stuAns));
            String line;
            HashMap<String, String> hm = new HashMap<>();
            while ((line = br.readLine()) != null) {
                try {
                    String[] split = line.split("\\.");
                    hm.put(split[0], split[1]);
                } catch (Exception e) {
                    String[] split = line.split("\\.");
                    hm.put(split[0], null);
                }
            }
            stuList.put(stuAns.getName().split("\\.")[0], hm);
            br.close();
        }

        TreeSet<Student> stus = new TreeSet<>();
        stuList.forEach((name, m) -> {
            int sum = 0;
            for (int i = 1; i <= 10; i++) {
                String propAns = answer.getProperty(String.valueOf(i));
                String stuAns = m.get(String.valueOf(i));
                if (stuAns != null) {
                    if (i <= 5) {
                        if (propAns.equalsIgnoreCase(stuAns)) {
                            sum += 2;
                        }
                    } else {
                        String[] split = stuAns.toUpperCase().split("");
                        Arrays.sort(split);
                        StringBuilder newStu = new StringBuilder();
                        for (String s : split) {
                            newStu.append(s);
                        }
                        if (propAns.equalsIgnoreCase(newStu.toString())) {
                            sum += 5;
                        }
                    }
                }
            }
            stus.add(new Student(name, sum));
        });

        BufferedWriter bw = new BufferedWriter(new FileWriter("AdvancedCode\\src\\HomeWork\\test2\\info.txt"));
        stus.forEach(s -> {
            try {
                bw.write(s.toString());
                bw.newLine();
                bw.flush();
            } catch (IOException e) {
                e.printStackTrace();
            }
        });
        bw.close();
    }
}
